CodeIgniter - Helper de Banco de Dados para Adicionar e Remover Chaves Estrangeiras
Se você trabalha com relacionamentos em tabelas de bancos de dados, principalmente ao utilizar o motor InnoDB do MySQL, com o framework CodeIgniter, então esse helper lhe pode ser muito útil.
Copie e cole o código abaixo em um arquivo chamado db_helper.php
dentro da pasta helpers
da sua aplicação e carregue-o com autoload ou $this->load->helper('db')
.
- application/helpers/db_helper.php
-
<?php /** * @author Natan Felles <natanfelles@gmail.com> */ defined('BASEPATH') OR exit('No direct script access allowed'); if ( ! function_exists('add_foreign_key')) { /** * @param string $table * @param string $foreign_key * @param string $references * @param string $on_delete * @param string $on_update * * @return string SQL command */ function add_foreign_key($table, $foreign_key, $references, $on_delete = 'RESTRICT', $on_update = 'RESTRICT') { $constraint = "{$table}_{$foreign_key}_fk"; $sql = "ALTER TABLE {$table} ADD CONSTRAINT {$constraint} FOREIGN KEY ({$foreign_key}) REFERENCES {$references} ON DELETE {$on_delete} ON UPDATE {$on_update}"; return $sql; } } if ( ! function_exists('drop_foreign_key')) { /** * @param string $table * @param string $foreign_key * * @return string SQL command */ function drop_foreign_key($table, $foreign_key) { $constraint = "{$table}_{$foreign_key}_fk"; $sql = "ALTER TABLE {$table} DROP FOREIGN KEY {$constraint}"; return $sql; } }
Você deve usar as funções desse helper dentro de uma query.
Para adicionar Chaves Estrangeiras, faça algo assim:
$table = 'users';
$fields = array(
'id' => [
'type' => 'INT(11)',
'auto_increment' => TRUE,
],
'country_id' => [
'type' => 'INT(11)',
],
);
$this->dbforge->add_field($fields);
$this->dbforge->add_key('id', TRUE);
$this->dbforge->create_table($table);
$this->db->query(add_foreign_key($table, 'country_id', 'countries(id)', 'CASCADE', 'CASCADE'));
E para remover as Chaves Estrangeiras, rode a função drop_foreign_key
:
$table = 'users';
$this->db->query(drop_foreign_key($table, 'country_id'));
$this->dbforge->drop_table($table);
É isso, algo simples que poderá lhe ajudar a manter uma melhor integridade no gerenciamento de bancos de dados usando o CodeIgniter.
Gist
Sugestão
Admiro, utilizo e contribuo com o projeto Adminer, principalmente pela sua interface completa e simples de acompanhar a integridade de bancos de dados. Então, se você quiser utilizá-lo, mas não curtir muito a interface padrão, criei uma interface para ele baseada no Twitter Bootstrap 3 e está disponível no GitHub.
O que acha de me comprar um café? Comprar um café